package com.tcm.consultation.service;

import com.base.core.exception.ServiceException;
import com.base.core.pager.PageBean;
import com.tcm.consultation.dto.ConsultationDTO;
import com.tcm.consultation.dto.PageConsultationDTO;
import com.tcm.consultation.entity.Consultation;

import java.util.List;

/**
 * 医生端问诊单列表
 */
public interface UserConsultationService {

    /**
     * 获得订单列表
     *
     * @param userId
     * @param start
     * @param length
     * @return
     */
    PageBean<PageConsultationDTO> listPageConsultation(Long userId, Long start, Long length);

    /**
     * 获得订单列表
     *
     * @param userId
     * @param status
     * @param start
     * @param length
     * @return
     */
    PageBean<PageConsultationDTO> listPageConsultation(Long userId, Long patientId, Byte status, Long start, Long length);


    /**
     * 获得单个问诊单
     *
     * @param orderId
     * @return
     */
    ConsultationDTO findConsultationById(Long orderId);

    /**
     * 统计订单数
     * @param userId
     * @param status
     * @return
     */
    Long countConsultation(Long userId, Long patientId, Byte status);

    /**
     * 从缓存中获取订单
     *
     * @param orderId
     * @return
     */
    ConsultationDTO findFromCache(Long orderId);

    /**
     * 创建订单
     *
     * @param consultationDTO
     * @return
     */
    Comparable<?> create(ConsultationDTO consultationDTO);

    /**
     * 保存订单到数据库
     *
     * @param consultationDTO
     * @return
     */
    int save(ConsultationDTO consultationDTO);

    /**
     * 取消订单
     *
     * @param orderId
     * @return
     */
    int cancel(Long orderId);

    int updatePayment(Long orderId, String payChannel) throws ServiceException;

    int paySuccess(Long orderId);

    int saveCacheToDb(Long orderId);

    /**
     * 删除订单
     *
     * @param orderId
     * @return
     */
    int deleteOrder(Long orderId);


}
